/**
 * Created by zhengquan on 2017/11/2.
 */
$(function () {
    var aclModuleList; //缓存权限模块列表
    var aclModuleMap = {};//缓存权限模块信息
    var aclMap = {};//缓存权限信息
    var optionStr = "";
    var lastClickAclModuleId = -1;//最后一次点击的权限模块id

    var aclModuleListTemplate = $("#aclModuleListTemplate").html();
    Mustache.parse(aclModuleListTemplate);
    var aclListTemplate = $("#aclListTemplate").html();
    Mustache.parse(aclListTemplate);

    loadAclModuleTree();
    bindAclModuleAddClick();
    bindAclAddClick();

    //加载权限模块树
    function loadAclModuleTree() {
        $.ajax({
            url: '/sys/aclModule/tree.json',
            success: function (result) {
                if (result.ret) {
                    aclModuleList = result.data;
                    var rendered = Mustache.render(aclModuleListTemplate, {
                        aclModuleList: aclModuleList,
                        "showDownAngle": function () {
                            return function (text, render) {
                                return (this.list && this.list.length > 0) ? "" : "hidden";
                            }
                        },
                        "displayClass": function () {
                            return "";
                        }
                    });
                    $("#aclModuleList").html(rendered);
                    recursiveRenderAclModule(aclModuleList);
                    bindAclModuleClick();
                } else {
                    showMessage("加载权限模块", result.msg, false);
                }
            }
        });
    }

    // 递归渲染权限模块树
    function recursiveRenderAclModule(aclModuleList) {
        if (aclModuleList && aclModuleList.length > 0) {
            $(aclModuleList).each(function (i, aclModule) {
                aclModuleMap[aclModule.id] = aclModule;
                if (aclModule.list && aclModule.list.length > 0) {
                    var rendered = Mustache.render(aclModuleListTemplate, {
                        aclModuleList: aclModule.list,
                        "showDownAngle": function () {
                            return function (text, render) {
                                return (this.list && this.list.length > 0) ? "" : "hidden";
                            }
                        },
                        "displayClass": function () {
                            return "hidden";
                        }
                    });
                    $("#aclModule_" + aclModule.id).append(rendered);
                    recursiveRenderAclModule(aclModule.list);
                }
            });
        }
    }

    function bindAclAddClick(){
        $(".acl-add").click(function () {
            $("#dialog-acl-form").dialog({
                modal: true,
                title: "新增权限点",
                open: function (event, ui) {
                    $(".ui-dialog-titlebar-close", $(this).parent()).hide();
                    optionStr = "";
                    recursiveRenderAclModuleSelect(aclModuleList, 1);
                    $("#aclForm")[0].reset();
                    $("#aclModuleSelectId").html(optionStr);
                },
                buttons: {
                    "添加": function (e) {
                        e.preventDefault();
                        updateAcl(true, function () {
                            $("#dialog-acl-form").dialog("close");
                            loadAclList(lastClickAclModuleId);
                        }, function (data) {
                            showMessage("新增权限点", data.msg, false);
                        });
                    },
                    "取消": function () {
                        $("#dialog-acl-form").dialog("close");
                    }
                }
            });
        });
    }


    function bindAclModuleAddClick(){
        $(".aclModule-add").click(function () {
            $("#dialog-aclModule-form").dialog({
                modal: true,
                title: "新增权限模块",
                open: function (event, ui) {
                    $(".ui-dialog-titlebar-close", $(this).parent()).hide();
                    optionStr = "<option value=\"0\">-</option>";
                    recursiveRenderAclModuleSelect(aclModuleList, 1);
                    $("#aclModuleForm")[0].reset();
                    $("#parentId").html(optionStr);
                },
                buttons: {
                    "添加": function (e) {
                        e.preventDefault();
                        updateAclModule(true, function () {
                            $("#dialog-aclModule-form").dialog("close");
                            loadAclModuleTree();
                        }, function (data) {
                            showMessage("新增权限模块", data.msg, false);
                        });
                    },
                    "取消": function () {
                        $("#dialog-aclModule-form").dialog("close");
                    }
                }
            });
        });
    }

    //绑定权限模块点击操作
    function bindAclModuleClick() {
        $(".aclModule-delete").click(function (e) {
            e.preventDefault();
            e.stopPropagation();
            var aclModuleId = $(this).attr("data-id");
            var aclModuleName = $(this).attr("data-name");
            if (confirm("确定要删除权限模块【" + aclModuleName + "】吗？")) {
                $.ajax({
                    url:'/sys/aclModule/delete.json',
                    data:{
                        id:aclModuleId
                    },
                    success:function(result){
                        debugger;
                        if(result.ret){
                            showMessage("删除权限模块【"+aclModuleName+"】","操作成功",false);
                            loadAclModuleTree();
                        }else{
                            showMessage("删除权限模块【"+aclModuleName+"】",result.msg,false);
                        }
                    }

                })
            }

        });
        $(".sub-aclModule").click(function (e) {
            e.preventDefault();
            e.stopPropagation();
            $(this).parent().parent().parent().children().children(".aclModule-name").toggleClass("hidden");
            if ($(this).is(".fa-angle-double-down")) {
                $(this).removeClass("fa-angle-double-down").addClass("fa-angle-double-up");
            } else {
                $(this).removeClass("fa-angle-double-up").addClass("fa-angle-double-down");
            }
        });

        $(".aclModule-edit").click(function (e) {
            e.preventDefault();
            e.stopPropagation();
            var aclModuleId = $(this).attr("data-id");
            $("#dialog-aclModule-form").dialog({
                modal: true,
                title: "编辑权限模块",
                open: function (event, ui) {
                    $(".ui-dialog-titlebar-close", $(this).parent()).hide();
                    optionStr = "<option value=\"0\">-</option>";
                    recursiveRenderAclModuleSelect(aclModuleList, 1);
                    $("#aclModuleForm")[0].reset();
                    $("#parentId").html(optionStr);
                    $("#aclModuleId").val(aclModuleId);
                    var targetAclModule = aclModuleMap[aclModuleId];
                    if (targetAclModule) {
                        $("#parentId").val(targetAclModule.parentId);
                        $("#aclModuleName").val(targetAclModule.name);
                        $("#aclModuleSeq").val(targetAclModule.seq);
                        $("#aclModuleRemark").val(targetAclModule.remark);
                        $("#aclModuleStatus").val(targetAclModule.state);
                    }
                },
                buttons: {
                    "更新": function (e) {
                        e.preventDefault();
                        updateAclModule(false, function () {
                            $("#dialog-aclModule-form").dialog("close");
                            loadAclModuleTree();
                        }, function (data) {
                            showMessage("编辑权限模块", data.msg, false);
                        });
                    },
                    "取消": function () {
                        $("#dialog-aclModule-form").dialog("close");
                    }
                }
            });
        });

        $(".aclModule-name").click(function (e) {
            e.preventDefault();
            e.stopPropagation();
            var aclModuleId = $(this).attr("data-id");
            handleAclModuleSelected(aclModuleId);
        });
    }

    //递归渲染权限模块select树
    function recursiveRenderAclModuleSelect(aclModuleList, level) {
        level = level | 0;
        if (aclModuleList && aclModuleList.length > 0) {
            $(aclModuleList).each(function (i, aclModule) {
                aclModuleMap[aclModule.id] = aclModule;
                var blank = "";
                if (level > 1) {
                    for (var j = 3; j <= level; j++) {
                        blank += "..";
                    }
                    blank += "┗";
                }
                optionStr += Mustache.render("<option value=\"{{id}}\">{{name}}</option>", {
                    id: aclModule.id,
                    name: blank + aclModule.name
                });
                if (aclModule.list && aclModule.list.length > 0) {
                    recursiveRenderAclModuleSelect(aclModule.list, level + 1);
                }

            })
        }
    }

    //处理权限模块的选中效果
    function handleAclModuleSelected(aclModuleId) {
        //移除原有权限模块的高亮样式
        if (lastClickAclModuleId != -1) {
            var lastAclModule = $("#aclModule_" + lastClickAclModuleId + " .dd2-content:first");
            lastAclModule.removeClass("btn-yellow");
            lastAclModule.removeClass("no-hover");
        }
        //添加当前权限模块的高亮样式
        var curAclModule = $("#aclModule_" + aclModuleId + " .dd2-content:first");
        curAclModule.addClass("btn-yellow");
        curAclModule.addClass("no-hover");
        //缓存权限模块id
        lastClickAclModuleId = aclModuleId;
        //加载权限点列表
        loadAclList(aclModuleId);
    }

    //加载权限点列表
    function loadAclList(aclModuleId) {
        var pageSize = $("#pageSize").val();
        var url = "/sys/acl/page.json?aclModuleId=" + aclModuleId;
        var pageNo = $("#aclPage .pageNo").val() || 1;
        $.ajax({
            url: url,
            data: {
                pageSize: pageSize,
                pageNo: pageNo
            },
            success: function (result) {
                renderAclListAndPage(result, url);
            }
        })
    }

    //渲染权限点列表和分页信息
    function renderAclListAndPage(result, url) {
        if (result.ret) {
            if (result.data.total > 0) {
                var rendered = Mustache.render(aclListTemplate, {
                    aclList: result.data.data,
                    "showAclModuleName": function () {
                        return aclModuleMap[this.aclModuleId].name;
                    },
                    "showStatus": function () {
                        return this.state == 1 ? '有效' : (this.state == 0 ? '冻结' : '删除')
                    },
                    "showType": function () {
                        debugger;
                        return this.type == 1 ? '菜单' : (this.type == 2 ? '按钮' : '其他')
                    },
                    "bold": function () {
                        return function (text, render) {
                            var state = render(text);
                            if (state == '有效') {
                                return "<span class='label label-sm label-success'>" + state + "</span>"
                            } else if (state == '冻结') {
                                return "<span class='label label-sm label-warning'>" + state + "</span>"
                            } else {
                                return "<span class='label'>" + state + "</span>"
                            }
                        }
                    }
                });
                $("#aclList").html(rendered);
                bindAclClick();
                $.each(result.data.data, function (i, acl) {
                    aclMap[acl.id] = acl;
                });
            } else {
                $("#aclList").html('');
            }
            var pageSize = $("#pageSize").val();
            var pageNo = $("#aclPage .pageNo").val() || 1;
            renderPage(url, result.data.total, pageNo, pageSize, result.data.total > 0 ? result.data.data.length : 0, "aclPage", renderAclListAndPage)
        } else {
            showMessage("获取权限模块下权限点列表", result.msg, false);
        }
    }

    //绑定权限点点击事情
    function bindAclClick() {
        $(".acl-role").click(function(e){
            e.preventDefault();
            e.stopPropagation();
            var aclId = $(this).attr("data-id");
            $.ajax({
                url: '/sys/acl/users.json',
                data: {aclId: aclId},
                type: 'post',
                success: function (result) {
                    if (result.ret) {
                        console.log(result);
                    } else {
                        showMessage("获取权限点分配的用户和角色", result.msg, false);
                    }
                }
            });
        });
        $(".acl-edit").click(function (e) {
            e.preventDefault();
            e.stopPropagation();
            var aclId = $(this).attr("data-id");
            $("#dialog-acl-form").dialog({
                modal: true,
                title: "编辑权限点",
                open: function (event, ui) {
                    $(".ui-dialog-titlebar-close", $(this).parent()).hide();
                    optionStr = "";
                    recursiveRenderAclModuleSelect(aclModuleList, 1);
                    $("#aclForm")[0].reset();
                    $("#aclModuleSelectId").html(optionStr);
                    var targetAcl = aclMap[aclId];
                    if (targetAcl) {
                        $("#aclId").val(targetAcl.id);
                        $("#aclModuleSelectId").val(targetAcl.aclModuleId);
                        $("#aclName").val(targetAcl.name);
                        $("#aclType").val(targetAcl.type);
                        $("#aclStatus").val(targetAcl.state);
                        $("#aclSeq").val(targetAcl.seq);
                        $("#aclUrl").val(targetAcl.url);
                        $("#aclRemark").val(targetAcl.remark);
                    }
                },
                buttons: {
                    "更新": function (e) {
                        e.preventDefault();
                        updateAcl(false, function () {
                            $("#dialog-acl-form").dialog("close");
                            loadAclList(lastClickAclModuleId);
                        }, function (data) {
                            showMessage("编辑权限点", data.msg, false);
                        });
                    },
                    "取消": function () {
                        $("#dialog-acl-form").dialog("close");
                    }
                }
            });
        });
    }


    //更新权限点操作
    function updateAcl(isCreate, successCallback, failCallback) {
        $.ajax({
            url: isCreate ? '/sys/acl/save.json' : '/sys/acl/update.json',
            data: $("#aclForm").serialize(),
            type: 'post',
            success: function (reslut) {
                if (reslut.ret) {
                    if (successCallback)successCallback(reslut);
                } else {
                    if (failCallback)failCallback(reslut);
                }
            }
        });
    }

    //更新权限模块操作
    function updateAclModule(isCreate, successCallback, failCallback) {
        $.ajax({
            url: isCreate ? '/sys/aclModule/save.json' : '/sys/aclModule/update.json',
            data: $("#aclModuleForm").serialize(),
            type: 'post',
            success: function (result) {
                if (result.ret) {
                    if (successCallback)successCallback(result);
                } else {
                    if (failCallback)failCallback(result);
                }
            }
        });
    }
});

